#!/bin/bash


function exit_func() 
{
	echo "Invalid arguments."
	echo "Usage: ./deploy.sh [global | asia | restapi | admin | intouch | staging]"
  	exit 0
}

function yes_or_no()
{
	echo "$1"
	read confirm_config
	if [[ $confirm_config == [Yy]* ]]; then
	    echo "Continuing because you have confirmed the configuration file."
	else
		echo "Aborting because you rejected the configuration file."
	    exit 0
	fi
}

if [ "$#" -lt 1 ]; then
	exit_func
fi

echo $1

DEPLOYFLAG=$1

CONFIG_FILE=""
if [[ "$DEPLOYFLAG" == "global" ]]; 
then
	CONFIG_FILE=global.config
elif [[ "$DEPLOYFLAG" == "admin" ]];
then
	 CONFIG_FILE=admin.config
elif  [[ "$DEPLOYFLAG" == "asia" ]];
then 
	CONFIG_FILE=asia.config
elif  [[ "$DEPLOYFLAG" == "restapi" ]]; 
then
	CONFIG_FILE=restapi.config
elif  [[ "$DEPLOYFLAG" == "intouch" ]]; 
then
	CONFIG_FILE=intouch.config
elif  [[ "$DEPLOYFLAG" == "staging" ]]; 
then
	CONFIG_FILE=staging.config
elif  [[ "$DEPLOYFLAG" == "china" ]]; 
then
	CONFIG_FILE=china.config
else
	exit_func
fi

if [ ! -f $CONFIG_FILE ]; then
    echo "Error: Config file not found, please create one"
    exit_func
fi

echo "Start to deploy the sendpix for $DEPLOYFLAG"

yes_or_no "Would you like to continue with this configuration file?  [y/n]"

echo "CONFIGURATION FILE:"
cat $CONFIG_FILE

source $CONFIG_FILE

HOSTNAME=$SERVERHOST
USERNAME=$SERVERUSERNAME

APACHEUSER=$VENGINE
WEBROOT=$WEBHOSTPATH
DEPLOYFOLDER=$RELEASEFOLDER
VHOST=$VMHOST
REPOURL=$REPOURL
ENV=$MYENV

CWD=$(pwd)

echo $WEBROOT/$VHOST

echo $REPOURL

RELEASE=$(date +"%Y%m%d%H%M%S")
TASK='\e[33m'
OK='\033[0;32m'
ERR='\033[0;31m'
NC='\033[0m'

function checksvncode()
{
	echo "------------------------------------" 2>&1
	echo -e "${TASK} Downloading SVN code and Create TAR file for deployment ${NC}" 2>&1
	
	#repo_type=${REPOURL:0:3}
	
	mkdir -p /tmp/workgroup
	
	echo $REPOURL
	
	svn co $REPOURL@$rel /tmp/workgroup/$RELEASE &>/dev/null
	echo "Tarring now!"
	tar --exclude=.svn -zcvf /tmp/workgroup/$RELEASE.tar.gz -C /tmp/workgroup/$RELEASE . &>/dev/null	
	
	rm -rf /tmp/workgroup/$RELEASE
	
	echo "Latest release file : /tmp/workgroup/$RELEASE.tar.gz"
	#rm -rf $1/latest/tags/$latest_tag &>/dev/null
	
	if [ -f "/tmp/workgroup/$RELEASE.tar.gz" ];
	then
		echo "Ready to deploy..."
	else
		
		echo "Not found the release file. Maybe it failed to get the code from SVN..."
		exit 1
	fi
}

function cloneGitCode()
{
    echo "------------------------------------" 2>&1
	echo -e "${TASK} Clone the code from ACDSee Git lab, and Create TAR file for deployment ${NC}" 2>&1

    mkdir -p /tmp/workgroup
	
	echo $REPOURL

    git clone $REPOURL /tmp/workgroup/$RELEASE &>/dev/null

    echo "complete to clone the code. tarring now...";

    tar --exclude=.git -zcvf /tmp/workgroup/$RELEASE.tar.gz -C /tmp/workgroup/$RELEASE . &>/dev/null	

    rm -rf /tmp/workgroup/$RELEASE
	
	echo "Latest release file : /tmp/workgroup/$RELEASE.tar.gz"

    if [ -f "/tmp/workgroup/$RELEASE.tar.gz" ];
	then
		echo "Ready to deploy..."
	else
		
		echo "Not found the release file. Maybe it failed to get the code from SVN..."
		exit 1
	fi
}

function scpfiles()
{
	echo "-----------------------------------------" 2>&1
	echo -e "${TASK}SCPing shared config files${NC}" 2>&1
	
	# scp -r $CWD/$REPO/$ENV/conf/ $USERNAME@$1:$WEBROOT$DEPLOYDIR$WEBSITEDIR/shared/ 2>&1
	# scp -r $CWD/$REPO/$ENV/vhost/ $USERNAME@$1:$WEBROOT$DEPLOYDIR$WEBSITEDIR/shared/ 2>&1
	#scp $CWD/$REPO/$ENV/$VHOST-ssl.conf $USERNAME@$1:$WEBROOT$DEPLOYDIR$WEBSITEDIR/shared/ 2>&1

		scp /tmp/workgroup/$RELEASE.tar.gz $USERNAME@$HOSTNAME:$WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE 2>&1
		if [ "$?" -eq "0" ];
		then
		    echo -e "${OK}TARBALL $RELEASE.tar.gz PUSHED TO $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/${NC}"
		else
		    echo -e "${ERR}FAILED TO PUSH TARBALL TO RELEASE DIR${NC}"
		fi
}

SETUPDIRS="
function setup_dirs
{
	echo '-----------------------------------------' 2>&1
	echo -e '${TASK}Creating DIRS $WEBROOT/$VHOST${NC}' 2>&1
	echo -e 'Setting up web directories and perms' 2>&1
	
	if [ ! -d  '$WEBROOT' ]; then	
		sudo mkdir $WEBROOT
	fi
	
	if [ ! -d  '$WEBROOT/$VHOST' ]; then	
		sudo mkdir $WEBROOT/$VHOST
	fi
	
	if [ ! -d  '$WEBROOT/$VHOST/$DEPLOYFOLDER' ]; then	
		sudo mkdir $WEBROOT/$VHOST/$DEPLOYFOLDER
	fi
	
	
	sudo mkdir $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE
		
	sudo chmod -R 777 $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE 2>&1

	echo '-----------------------------------------' 2>&1
	echo -e 'Setting up cache folder....' 2>&1
	if [ ! -d  '/var/acdid_data' ];
	then 		
		sudo mkdir /var/acdid_data

		sudo mkdir /var/acdid_data/logs
		sudo mkdir /var/acdid_data/email_batch
        sudo mkdir /var/acdid_data/ipwhitelist

        sudo chown -R ubuntu:www-data /var/acdid_data/logs
		sudo chmod 777 -R /var/acdid_data/logs
        sudo chown -R ubuntu:www-data /var/acdid_data/email_batch
        sudo chmod 777 -R /var/acdid_data/email_batch
        
	fi 		
		
	echo -e '${OK}Done..DIR Setup is good${NC}' 2>&1
}
setup_dirs
"

DEPLOY="
function untartag
{
	echo -e '----------------untartag-------------------------'
	echo -e '${TASK}UNTARRING TARBALL NOW${NC}' 2>&1
	cd $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE
	
	tar -xvf $RELEASE.tar.gz . &> /dev/null
	if [ '$?' -eq '0' ];
	then
	    echo -e '${OK}TARBALL $RELEASE.tar.gz SUCCESFULLY UNTARRED${NC}'
	else
	    echo -e '${ERR}UNTAR FAILED${NC}'
	fi
	
	rm $RELEASE.tar.gz	

    sudo chown -R $USERNAME:$APACHEUSER $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE 	
}
function checkcomposer
{
	echo -e '---------------checkcomposer--------------------------'
	echo -e '${TASK}CHECKING COMPOSER${NC}' 2>&1
	echo 'Checking if composer is installed' 2>&1
	if [ ! -f /usr/bin/composer ]; then
		echo 'Setting up Composer'

		sudo apt install php-cli unzip		
		cd ~ 2>&1
		curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
		HASH=`curl -sS https://composer.github.io/installer.sig`
		echo $HASH
		php -r \"if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;\"
		sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
		composer --version		
	else
		echo 'Composer is already setup'
		composer --version
	fi
}
function setuplinks
{
	echo -e '-----------------setuplinks------------------------'
	echo -e '${TASK}UPDATING LINKS IN $DEPLOYFOLDER/$RELEASE${NC}' 2>&1

	cd $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/api9.0

    echo -e '----$ENV enviornment----------------'
	
	if [ '$ENV' == 'prod' ];
	then		
        echo -e '----------121231234234444444444----------------'
		if [[ "$DEPLOYFLAG" == "asia" ]];
		then
			sudo ln -s $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/api9.0/.env.prod-sg .env 2>&1
		else 
			sudo ln -s $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/api9.0/.env.prod .env 2>&1
		fi
	else
		sudo ln -s $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/api9.0/.env.staging .env 2>&1
	fi

    sudo chown -R $USERNAME:$APACHEUSER $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE 
	sudo chmod -R 775 $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE
}
function setupvendors
{
	echo -e '-----------------setupvendors------------------------'
	echo -e '${TASK}INSTALLING/UPDATING VENDORS${NC}' 2>&1
	
	cd $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/api9.0
	composer install 2>&1
}
function updatecurrent
{
	echo -e '-------------------updatecurrent----------------------'
	echo -e '${TASK}UPDATING CURRENT LINK TO releases/$RELEASE${NC}' 2>&1
	cd /var/www
	sudo rm ./ACDID
    sudo rm ./ACDID9_API
	sudo ln -s $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/api9.0/ ACDID9_API
    sudo ln -s $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/legacy/ ACDID		

    cd /var/www/ACDID/core/bin
    sudo sh ./build.sh    
        
    if [[ "$DEPLOYFLAG" == "global" ]]; 
    then
		sudo cp /var/www/ACDID/maintenance/pswd/sql_pswd.php /var/acdid_data/sql_pswd.php        
        sudo cp /var/www/ACDID/maintenance/config/config_local_main.php /var/www/ACDID/core/config_local.php
		sudo cp /var/www/ACDID/maintenance/config/config_local_main.php $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/common/core/config_local.php
    elif [[ "$DEPLOYFLAG" == "admin" ]];
    then
		sudo cp /var/www/ACDID/maintenance/pswd/sql_pswd_admin.php /var/acdid_data/sql_pswd.php
        sudo cp /var/www/ACDID/maintenance/config/config_local_admin.php /var/www/ACDID/core/config_local.php
		sudo cp /var/www/ACDID/maintenance/config/config_local_admin.php $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/common/core/config_local.php
    elif [[ "$DEPLOYFLAG" == "asia" ]];
    then 
		sudo cp /var/www/ACDID/maintenance/pswd/sql_pswd_sg.php /var/acdid_data/sql_pswd.php
        sudo cp /var/www/ACDID/maintenance/config/config_local_sg.php /var/www/ACDID/core/config_local.php
		sudo cp /var/www/ACDID/maintenance/config/config_local_sg.php $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/common/core/config_local.php
	elif [[ "$DEPLOYFLAG" == "china" ]];
    then 
		sudo cp /var/www/ACDID/maintenance/pswd/sql_pswd_cn.php /var/acdid_data/sql_pswd.php
        sudo cp /var/www/ACDID/maintenance/config/config_local_cn.php /var/www/ACDID/core/config_local.php
		sudo cp /var/www/ACDID/maintenance/config/config_local_cn.php $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/common/core/config_local.php
    elif [[ "$DEPLOYFLAG" == "restapi" ]]; 
    then
		sudo cp /var/www/ACDID/maintenance/pswd/sql_pswd.php /var/acdid_data/sql_pswd.php
        sudo cp /var/www/ACDID/maintenance/config/config_local_api.php /var/www/ACDID/core/config_local.php
		sudo cp /var/www/ACDID/maintenance/config/config_local_api.php $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/common/core/config_local.php
	elif [[ "$DEPLOYFLAG" == "intouch" ]]; 
    then
		sudo cp /var/www/ACDID/maintenance/pswd/sql_pswd_admin.php /var/acdid_data/sql_pswd.php
        sudo cp /var/www/ACDID/maintenance/config/config_intouch_api.php /var/www/ACDID/core/config_local.php
		sudo cp /var/www/ACDID/maintenance/config/config_intouch_api.php $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/common/core/config_local.php
    elif [[ "$DEPLOYFLAG" == "staging" ]]; 
    then
		sudo cp /var/www/ACDID/maintenance/pswd/sql_pswd_staging.php /var/acdid_data/sql_pswd.php
        sudo cp /var/www/ACDID/maintenance/config/config_local_staging.php /var/www/ACDID/core/config_local.php
		sudo cp /var/www/ACDID/maintenance/config/config_local_staging.php $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/common/core/config_local.php
    fi


    cd /var/www/ACDID/core
    echo '<?php ' >> config_var.php
	sudo chown -R $USERNAME:$APACHEUSER ./

	cd $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/common/core
	sudo ln -s /var/www/ACDID/core/config_var.php ./

	cd $WEBROOT/$VHOST/$DEPLOYFOLDER/$RELEASE/common/core/bin
	sudo sh ./build.sh

	sudo chown -R $USERNAME:$APACHEUSER ./


    #rm -r /var/www/ACDID/logs
    sudo rm -r /var/www/ACDID/data
    sudo rm -r /var/www/ACDID/maintenance
    sudo rm -rf /var/www/ACDID9_API/documents


    cd /var/www
    sudo chown -R $USERNAME:$APACHEUSER ./ACDID9_API/

    sudo chown -R $USERNAME:$APACHEUSER ./ACDID/

    cd ~
}

function restartserver
{
	echo -e '-----------------restartserver------------------------'
	
	echo -e '${TASK}RESTARTING apache2 ${NC}' 2>&1
	sudo service apache2 restart 2>&1
}

untartag
checkcomposer
setupvendors
setuplinks
updatecurrent

restartserver
"

CLEANUPRELEASEFOLDER="
function cleanreleasefolder
{
		echo '-----------------------------------------'
		echo -e '${TASK}CLEANING UP RELEASE FOLDER${NC}' 2>&1
		echo '-----------------------------------------'
		cd $WEBROOT/$VHOST/current
	
		if [[ '$1' == 'task' ]];
		then
			sudo rm -rf ./storages ./routes ./documents
		else
			sudo rm -rf  ./documents
		fi
		
		## sudo ls -t1 . | tail -n +6 | xargs rm -r
}
cleanreleasefolder
"

CheckOS="
# Function to disable SELinux
function f_disable_selinux {
    SE=`cat /etc/selinux/config | grep ^SELINUX= | awk -F'=' '{print $2}'`
    echo -e 'Checking SELinux status ...'
    echo ""
    sleep 1

    if [[ '$SE' == 'enforcing' ]]; then
        sed -i 's|SELINUX=enforcing|SELINUX=disabled|g' /etc/selinux/config
        echo -e 'Disable SElinux and reboot after 5s. Press Ctrl+C to stop script.'
        echo -e 'After system reboot, please run script again.'
        echo -e ''
        sleep 5
        reboot
    fi
}

f_disable_selinux
"



echo -e "####################### DEPLOYING ${REPO} @ ${HOSTNAME} - ${OK}${ENV}${NC} #######################" 2>&1 > ./logs/deploy-$HOSTNAME-$RELEASE

tail -f ./logs/deploy-$HOSTNAME-$RELEASE &

echo "SVN address: "
echo $REPOURL

cloneGitCode $REPOURL 2>&1 >> ./logs/deploy-$HOSTNAME-$RELEASE

ssh -l ${USERNAME} ${HOSTNAME} "${CheckOS}" >> ./logs/deploy-$HOSTNAME-$RELEASE

echo "start to sendup directories...."

echo "User Name: ${USERNAME} ${HOSTNAME}"

ssh -l ${USERNAME} ${HOSTNAME} "${SETUPDIRS}" >> ./logs/deploy-$HOSTNAME-$RELEASE

scpfiles $HOSTNAME 2>&1 >> ./logs/deploy-$HOSTNAME-$RELEASE

ssh -l ${USERNAME} ${HOSTNAME} "${DEPLOY}" >> ./logs/deploy-$HOSTNAME-$RELEASE

exit 1

